/**
 * Copyright ©2003~2019年5月6日 szkingdom
 * @author raohj
 * @date 2019年5月6日
 * @file RThreadLocal.java
 * @comment : please input your comment to this file
 * @version : input version
 * @modify:
 * 		1、 2019年5月6日 由 raohj 新建文件
 */
package com.ccnu.demojava.concurrent.thread;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author raohj
 * @date 2019年5月6日
 * @version 
 * @comment 测试线程本地存储变量，适用于某一些需要使用全局变量或静态变量的场景
 */
public class RThreadLocal {
	private static final Logger log = LoggerFactory.getLogger(RThreadLocal.class);
	/**
	 * @author raohj
	 * @date 2019年5月6日
	 * @version 
	 * @comment 测试线程本地存储变量，适用于某一些需要使用全局变量或静态变量的场景
	 */
	public static class RLocalRunnable implements Runnable{
		private static ThreadLocal<Integer> connects = new ThreadLocal<Integer>();
		@Override
		public void run() {
			// 修改线程局部变量
			connects.set((int) Thread.currentThread().threadId());
			connects.set(connects.get() + 1);
			try {
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			log.info("ThreadLocal values[" + connects.get() + "]");
		}
	}
	
	public static void test() {
		ExecutorService es = Executors.newFixedThreadPool(10);
		for(int i=0; i<10; i++) {
			es.execute(new RLocalRunnable());
		}
		es.shutdown();
	}
}
